import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';

// 创建 Axios 实例
const axiosInstance: AxiosInstance = axios.create({
    baseURL: '/backend', // 填写你的接口请求地址
    // baseURL: 'http://localhost:20021/', // 填写你的接口请求地址
    timeout: 10000, // 请求超时时间（单位：毫秒）
    headers: {
        'Content-Type': 'application/json', // 默认请求头设置
    }
});
// 请求拦截器
axiosInstance.interceptors.request.use(
    (config: AxiosRequestConfig) => {
        const token = sessionStorage.getItem("token")
        // 在发送请求之前做些什么，例如添加公共请求头
                config.headers!['Authorization'] =
            token ? token : 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnRJZCI6IjAiLCJleHAiOjE3MjQzODMyNTAsInVzZXJJZCI6IjE4MDg3MzE0NDI4NTk5OTkyMzcifQ.4sQk3RBSzWg9Wf0eqcemNbLJQhFGtRSv1lnwivbvjTM'
        return config;
    },
    (error: any) => {
        // 对请求错误做些什么
        console.error('请求拦截器错误:', error);
        return Promise.reject(error);
    }
);

// 响应拦截器
axiosInstance.interceptors.response.use(
    (response: AxiosResponse) => {
        // 对响应数据做些什么，例如统一处理错误信息
        console.log('响应拦截器:', response);
        return response; // 返回响应数据中的 data 部分
    },
    (error: any) => {
        // 对响应错误做些什么
        console.error('响应拦截器错误:', error);
        return Promise.reject(error);
    }
);

// 封装请求方法
export const request = async <T>(config: AxiosRequestConfig): Promise<T> => {
    try {
        const response: AxiosResponse<T> = await axiosInstance(config);
        return response.data;
    } catch (error) {
        console.error('请求异常:', error);
        throw error; // 抛出异常，由调用者处理
    }
};

// 导出 Axios 实例，以便其他地方可以直接使用
export default axiosInstance;
